package buffer;

import java.nio.ByteOrder;
import java.nio.ReadOnlyBufferException;

import rubbish.LongBuffer1;
import sun.misc.Cleaner;
import sun.misc.Unsafe;
import sun.nio.ch.DirectBuffer;
import sun.nio.ch.FileChannelImpl;

class DirectLongBufferRU1 extends DirectLongBufferU1 implements DirectBuffer {
	// For duplicates and slices
	DirectLongBufferRU1(DirectBuffer db, int mark, int pos, int lim, int cap, int off) {
		super(db, mark, pos, lim, cap, off);
	}

	public LongBuffer1 slice() {
		int pos = this.position();
		int lim = this.limit();
		assert (pos <= lim);
		int rem = (pos <= lim ? lim - pos : 0);
		int off = (pos << 3);
		assert (off >= 0);
		return new DirectLongBufferRU1(this, -1, 0, rem, rem, off);
	}

	public LongBuffer1 duplicate() {
		return new DirectLongBufferRU1(this, this.markValue(), this.position(), this.limit(), this.capacity(), 0);
	}

	public LongBuffer1 asReadOnlyBuffer() {
		return duplicate();
	}

	public LongBuffer1 put(long x) {
		throw new ReadOnlyBufferException();
	}

	public LongBuffer1 put(int i, long x) {
		throw new ReadOnlyBufferException();
	}

	public LongBuffer1 put(LongBuffer1 src) {
		throw new ReadOnlyBufferException();
	}

	public LongBuffer1 put(long[] src, int offset, int length) {
		throw new ReadOnlyBufferException();
	}

	public LongBuffer1 compact() {
		throw new ReadOnlyBufferException();
	}

	public boolean isDirect() {
		return true;
	}

	public boolean isReadOnly() {
		return true;
	}

	public ByteOrder order() {
		return ((ByteOrder.nativeOrder() != ByteOrder.BIG_ENDIAN) ? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN);
	}
}